SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
-- <ACTUALIZACIONES> 29-26-2006 por SANES, Jorge. Cambio para que tome bien el servicio ligado (SELECT @ServicioLigado = idServicio FROM tb_RelINTerServicios WHERE idServicio2= @Servicio)
-- <ACTUALIZACIONES> 06-09-2007 por FIORUCCI Adriana / SANES Jorge  tema Licencia CONFIRMDA, referencia para buscar 06/09/2007 
-- <ACTUALIZACIONES> 08-04-2009 por FIORUCCI Adriana / OTERO Marcelo / SANES Jorge  tema Servicios Relacionados y su fin, 07 y 08 -04-2009
-- <ACTUALIZACIONES> 06 - 05 - 2009 por OTERO, Marcelo y SANES,  Jorge, Se agrego Manejo de Transacciones 

CREATE PROCEDURE [dbo].[paEjecutarFinesDeLicencias]
@idCola INT, 
@Norma INT = NULL,
@SubServicioDeLaNorma INT OUTPUT,
@EsForzado BIT
AS

DECLARE @Agente INT
DECLARE @Plaza INT
DECLARE @Fecha DATETIME
DECLARE @Organizacion INT
DECLARE @REsponsable INT
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @FechaTermino DATETIME
DECLARE @SitRev INT
DECLARE @Nivel INT
DECLARE @modalidad INT
DECLARE @zona INT
DECLARE @cargosalarial INT
DECLARE @Licencia INT
DECLARE @cantidadhoras INT
DECLARE @movimiento INT
DECLARE @estado INT
DECLARE @observaciones VARCHAR(255)
DECLARE @CausaAlta INT
DECLARE @enfermedad INT
DECLARE @idsAnterior INT
DECLARE @normatemp INT
DECLARE @SituacionExtraordinaria INT
DECLARE @SituacionLabAsociada INT
DECLARE @NormaFin INT

SELECT @SituacionExtraordinaria = 1

SELECT @Agente = Agente, @Plaza = Plaza, @Fecha = Fecha, @Organizacion = Organizacion, @Responsable = Responsable, @Fecha1 = Fecha1,
@Fecha2 = Fecha2, @SitRev = SitRev, @Nivel = Nivel, @Modalidad = Modalidad, @Zona = Zona, @cargosalarial = cargosalarial, @Licencia = licencia,
@cantidadhoras = cantidadhoras, @movimiento = movimiento, @Estado = Estado, @Observaciones = observaciones, @CausaAlta = CausaAlta, 
@FechaTermino = FechaTermino
FROM tb_ColaDeMovimientos 
WHERE idCola = @idCola

SELECT @SubServicioDeLaNorma = 0

-- Si el Estado es Rechazado, Ejecutado o Ejecutado Forzado
IF @Estado = 2 or @Estado = 4 or @Estado = 5
	RETURN 

DECLARE @idPlaza INT
DECLARE @SubServicio INT
DECLARE @idSubServicio INT
DECLARE @Servicio INT
DECLARE @NroOrden INT
DECLARE @Baja VARCHAR(1)
DECLARE @FFecha2 DATETIME
DECLARE @FFecha1 DATETIME
DECLARE @FTermino DATETIME
DECLARE @ServicioLigado INT
DECLARE @fecha3 DATETIME
DECLARE @Confirmada VARCHAR(1)
DECLARE @Error INT 


SET @Error = 0 


SELECT @idPlaza = idPlaza, @SubServicio = Servicio, @Enfermedad = Enfermedad, @Confirmada = Confirmada FROM tb_PlazasDeMovimiento WHERE idCola = @idCola

IF @Confirmada IS NULL
    SET @Confirmada = 'N'
   

SELECT @Modalidad = Modalidad,@Nivel= Nivel , @NroOrden = NroOrden9+1, @Servicio = ServicioAgente, @Licencia=Licencia
	FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio
	
IF @enfermedad = -1
	SELECT @Enfermedad = null
--Para ver si tiene que tener un servicio relacionado
SELECT @SituacionLabAsociada = SituacionLaboralAsociada FROM tb_Licencias WHERE idLicencia = @Licencia

-- Si la licencia requiere enfermedad y no se especifica al momento de cargar NO se confirma el movimiento. Para el Resto de los casos mantiene lo que se puso en la pantalla (04-09-2007)
IF (SELECT RequiereRegEnfermedad FROM Tb_Licencias WHERE idLicencia = @Licencia) = 'S' AND (@Enfermedad IS NULL OR @Enfermedad = 0)
	SELECT @Confirmada = 'N'

/* 06/09/2007   Cambié por el Select anterior....
SELECT @Modalidad = (SELECT Modalidad FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio)
SELECT @Nivel = (SELECT Nivel FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio)
SELECT @NroOrden = (SELECT NroOrden9 FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio) + 1
SELECT @Servicio = (SELECT ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio)
SELECT @licencia = (SELECT licencia FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio)
*/

-- Con este cursor obtenemos el servicio y la plaza para iniciar el servicio
BEGIN TRANSACTION FinDeLicencia

DECLARE @contador INT
--UPDATE tbMovimientos set contador = contador + 1, anio = year(getdate()) WHERE idMovimiento = 2
SELECT @contador = contador FROM tb_MovimientosDocentes WHERE idMovimiento = 2

-- PARA CUANDO SE ACTUALIZA UNA FECHA DE BAJA EN LA LICENCIA
-- Si el subservicio tiene fecha de baja (por ahora no miro si está o no confirmada)

--  06/09/2007  ... Hasta lo que ví... no entra por el If porque la 'limitación de licencia muestra licencias abiertas.....quizá antes era distinto.
IF (SELECT fechabaja FROM tb_SubServiciosAgentes WHERE idSubServicio = @subservicio) is not null
BEGIN
prINT 'Entro fecha de baja no nula'
	-- Si existe un subservicio posterior al fin de licencia que se modIFica --> Se INSERTa un subservicio normal entre los dos.
	IF exists(SELECT top 1 idSubServicio FROM tb_SubServiciosAgentes WHERE fechaalta >= (SELECT FechaAlta FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio) And ServicioAgente = @Servicio And IdSubServicio <> @SubServicio)
	BEGIN
		IF (SELECT fechabaja FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio) > @Fecha2 
		BEGIN
			-- Para ver si hay que poner situacion extraordinaria <> normal en el subservicio que se INSERTa
			IF Exists(SELECT top 1 IdServicio FROM tb_RelINTerServicios WHERE IdServicio = @Servicio)
				SELECT @SituacionExtraordinaria = SituacionExtraordinaria FROM tb_ServiciosAgentes, tb_RelINTerServicios, tb_SubServiciosAgentes SS WHERE IdServicioagente = IdServicio2 And IdServicioAgente = Servicioagente And idServicio = @Servicio And SS.FechaBaja Is Null And SS.SituacionExtraordinaria <> 1
			prINT 'Entro fecha de baja no nula :: ' + 'Primer IF' 
			SELECT @fecha3 = fechaalta FROM tb_SubServiciosAgentes WHERE dateadd(day,-1,fechaalta) = (SELECT fechabaja FROM tb_subserviciosagentes WHERE idSubServicio = @subservicio) and Servicioagente = @Servicio
			INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertIFicadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertIFicado, 
			FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertIFicado, NroOrden9, Plaza, ServicioAgente, 
			SituacionExtraordinaria, SituacionLaboral, TramiteAlta, TramiteBaja, Zona, confirmada)			
			VALUES ('S', null,1,1,dateadd(day,1,@Fecha2), dateadd(day,-1,@fecha3), null, null, null, @Modalidad, 5,@Nivel,null,null,0, @NroOrden, @idPlaza, @Servicio, @SituacionExtraordinaria, 5, 0, 0,0,'N')   -- 06/09/2007 Cambié 'S' x 'N' porque inserta un Normal

			SELECT @Error = @@Error
			IF @Error <> 0
		    		GOTO SALIR

			--Actualizo la fecha de baja de la licencia
			UPDATE tb_SubServiciosAgentes set fechabaja = @fecha2, confirmada = @confirmada , codenfermedad = @enfermedad, normatemporalbaja =  @contador, NormaFin = @Norma WHERE idSubServicio = @subServicio  -- 06/09/2007 Cambié 'S' x @Confirmada

			SELECT @Error = @@Error
			IF @Error <> 0
		    		GOTO SALIR

			SELECT @idsAnterior = @@identity
		END
	
		-- tengo que ver si el servicio tiene un servicio ligado para darlo de baja
		IF (SELECT ServicioLigado FROM tb_ServiciosAgentes WHERE idServicioAgente = @Servicio) is not null
 		BEGIN
   			prINT 'Entro fecha de baja no nula :: ' + 'Segundo IF' 
			SELECT @ServicioLigado = ServicioLigado FROM tb_ServiciosAgentes WHERE idServicioAgente = @Servicio

   			UPDATE tb_ServiciosAgentes set baja = 'S', FechaBaja = @Fecha3 WHERE idServicioAgente =  @ServicioLigado
			SELECT @Error = @@Error
			IF @Error <> 0
		    		GOTO SALIR

   			UPDATE tb_SubServiciosAgentes set baja = 'S', FechaBaja = @Fecha3, confirmada =@confirmada, movimiento = 2 WHERE ServicioAgente = @ServicioLigado and NroOrden9 = (SELECT max(NroOrden9) FROM tb_SubServiciosAgentes WHERE ServicioAgente = @ServicioLigado) -- 06/09/2007 Cambié 'S' x @Confirmada
			SELECT @Error = @@Error
			IF @Error <> 0
		    		GOTO SALIR

 		END
		
	END
	ELSE
	BEGIN
		PrINT 'Entro a ultimo subservicio con licencia....'
		SELECT @fecha3 = FechaBaja FROM tb_SubServiciosAgentes WHERE IdSubServicio = @SubServicio
		UPDATE tb_SubServiciosAgentes Set FechaBaja = @Fecha2, Baja='S', Confirmada=@confirmada, Movimiento=3, NormaFin = @Norma WHERE IdSubServicio = @SubServicio  -- 06/09/2007 Cambié 'S' x @Confirmada
		SELECT @Error = @@Error
		IF @Error <> 0
	    		GOTO SALIR

		-- Para ver si hay que poner situacion extraordinaria <> normal en el subservicio que se INSERTa
		IF Exists(SELECT top 1 IdServicio FROM tb_RelINTerServicios WHERE IdServicio = @Servicio)
			SELECT @SituacionExtraordinaria = SituacionExtraordinaria FROM tb_ServiciosAgentes, tb_RelINTerServicios, tb_SubServiciosAgentes SS WHERE IdServicioagente = IdServicio2 And IdServicioAgente = Servicioagente And idServicio = @Servicio And SS.FechaBaja Is Null And SS.SituacionExtraordinaria <> 1

		INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertIFicadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertIFicado, 
		FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertIFicado, NroOrden9, Plaza, ServicioAgente, 
		SituacionExtraordinaria, SituacionLaboral, TramiteAlta, TramiteBaja, Zona, confirmada)			
		VALUES ('S', null,1,1,dateadd(day,1,@Fecha2), @fecha3, null, null, null, @Modalidad, 2,@Nivel,null,null,0, @NroOrden, @idPlaza, @Servicio, @SituacionExtraordinaria, 5, 0, 0,0,'N') -- 06/09/2007 Cambié 'S' x 'N' porque inserta un Normal

		SELECT @Error = @@Error
		IF @Error <> 0
	    		GOTO SALIR

	END
	
END

ELSE

BEGIN

	UPDATE tb_SubServiciosAgentes set baja = 'S', FechaBaja = @Fecha2, codenfermedad=@enfermedad, normatemporalbaja = @contador, confirmada=@Confirmada , NormaFin = @Norma 
		WHERE idSubServicio = @SubServicio  -- 06/09/2007  Cambié 'S' x @Confirmada
	
	SELECT @Error = @@Error
	IF @Error <> 0
			GOTO SALIR
	
	
	SELECT @idsAnterior = @@identity
	
	-- tengo que ver si el servicio tiene un servicio ligado para darlo de baja
	IF exists(SELECT top 1 IdServicio2  FROM tb_RelINTerServicios WHERE idServicio2 = @Servicio ) and @SituacionLabAsociada = 1 -- Agregado Si tiene LE tendra Serv Relacionado
	BEGIN
		PrINT 'Entro a actualizar servicio base'
		DECLARE @idSubServicioLigado INT
	
		-- Cambio de Seleccion 08-04-2009	
		SELECT @ServicioLigado = idServicio FROM tb_RelInterservicios RIS 
							   INNER JOIN tb_SubserviciosAgentes SS ON ss.ServicioAgente = RIS.idServicio  
							   WHERE SS.FechaBaja IS NULL 
							         AND idServicio2 = @Servicio
		--SELECT @ServicioLigado = idServicio FROM tb_RelINTerServicios WHERE idServicio2 = @Servicio  ---JOIN con tb_servicios para ver cual está abierto
	
	
		-- Esto estaba bien 08-04-2009
		SELECT @idSubServicioLigado = idSubServicio FROM tb_SubServiciosAgentes 
			WHERE ServicioAgente = @ServicioLigado and fechaalta = (SELECT max(fechaalta) FROM tb_SubServiciosAgentes WHERE ServicioAgente = @ServicioLigado)
			
		-- Actualizo el servicio ligado LE.
		IF @ServicioLigado IS NOT NULL AND @idSubServicioLigado IS NOT NULL
		BEGIN
			UPDATE tb_ServiciosAgentes set baja = 'S', FechaBaja = @Fecha2 WHERE idServicioAgente =  @ServicioLigado
	
			SELECT @Error = @@Error
			IF @Error <> 0
		    		GOTO SALIR
	
			UPDATE tb_SubServiciosAgentes set baja = 'S', Fechabaja = @Fecha2 WHERE idSubServicio = @idSubServicioLigado
	
			SELECT @Error = @@Error
			IF @Error <> 0
		    		GOTO SALIR
	
		END
	END
	
	--Estado de Liq Externa estoy escribiENDo siempre en 1, Situacion Extraordinaria = 1, Situacion Laboral = 5
	-- Para ver si hay que poner situacion extraordinaria <> normal en el subservicio que se INSERTa
	IF Exists(SELECT top 1 idServicio FROM tb_RelINTerServicios WHERE IdServicio = @Servicio)
		SELECT @SituacionExtraordinaria = SituacionExtraordinaria FROM tb_ServiciosAgentes, tb_RelINTerServicios, tb_SubServiciosAgentes SS WHERE IdServicioagente = IdServicio2 And IdServicioAgente = Servicioagente And idServicio = @Servicio And SS.FechaBaja Is Null And SS.SituacionExtraordinaria <> 1

	INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertIFicadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertIFicado, 
	FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertIFicado, NroOrden9, Plaza, ServicioAgente, 
	SituacionExtraordinaria, SituacionLaboral, TramiteAlta, TramiteBaja, Zona)
	VALUES ('N', null,1,1,dateadd(day,1,@Fecha2), null, null, null, null, @Modalidad, 5,@Nivel,null,null,0, @NroOrden, @idPlaza, @Servicio, @SituacionExtraordinaria, 5, 0, 0,0)
	
	SELECT @Error = @@Error
	IF @Error <> 0
    		GOTO SALIR

END
DECLARE @idss INT

--Actualizo la cola de movimientos en estado = Ejecutado
UPDATE tb_ColaDeMovimientos SET Estado = CASE WHEN @EsForzado = 0 THEN 4 ELSE 5 END, NTUserEjecutor = SYSTEM_USER, FechaEjecucion = GETDATE()  WHERE idCola = @idCola
SELECT @Error = @@Error
IF @Error <> 0
		GOTO SALIR

--UPDATE tbPlazasDeMovimiento set servicio = @idss WHERE idCola = @idCola and idPlaza = @idPlaza

DECLARE @UbicacionOrig INT
-- Esta es la organizacion donde se presta el servicio
SELECT @UbicacionOrig = UbicacionOrig FROM tb_ServiciosAgentes WHERE idServicioAgente = (SELECT ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio)

IF Exists(SELECT top 1 idservicioagente FROM tb_SubserviciosAgentes ss, tb_serviciosagentes sa, tb_Plazas p WHERE ss.servicioagente = sa.idservicioagente and idPlaza = Plaza and ss.fechabaja = @fecha2 And ss.licencia = @licencia And @agente = sa.agente And ss.idSubServicio <> @SubServicio And UbicacionOrig = @UbicacionOrig And p.RegimenSalarial = 13) 
BEGIN
 	prINT 'Entro a actualizar norma termporal de baja'
	SELECT @normatemp = normatemporalbaja FROM tb_subserviciosagentes ss, tb_serviciosagentes sa, tb_Plazas p WHERE ss.servicioagente = sa.idservicioagente And idPlaza = Plaza And ss.fechabaja = @fecha2 And ss.licencia = @licencia And @agente = sa.agente And ss.idSubServicio <> @SubServicio And UbicacionOrig = @UbicacionOrig And p.RegimenSalarial = 13
	UPDATE tb_SubserviciosAgentes set normatemporalbaja = @normatemp WHERE idsubservicio = @subServicio
	SELECT @Error = @@Error
	IF @Error <> 0
    		GOTO SALIR

END

SELECT @SubServicioDeLaNorma = @SubServicio 


SALIR:

IF @Error = 0
	COMMIT TRANSACTION FinDeLicencia
ELSE
	ROLLBACK TRANSACTION FinDeLicencia
GO
GRANT EXECUTE ON  [dbo].[paEjecutarFinesDeLicencias] TO [PersonalDocente]
GO
